/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Presenter;

import Algorithm.EnvioPedidoAlg;
import Model.EnvioPedido;
import Model.Pedido;
import Model.Vehiculo;
import DAO.EnvioPedidoDAO;
import DAO.PedidoDAO;
import DAO.RutaDAO;
import DAO.VehiculoDAO;
import DAO.EmpleadoDAO;
import Model.Camino;
import Model.Ruta;
import Model.RutaCamino;
import Model.RutaCaminoId;
import Model.Empleado;
import java.math.BigDecimal;
import java.util.*;
/**
 *
 * @author sebastian
 */
public class EnvioPedidoPresenter {
    
    public static void registrarEnvioPedido( EnvioPedidoAlg objEnvioPedido , int modoAuto ){
        //tambien debo actualizar el pedido y el vehiculo con el que se manda
        EnvioPedido envPed = new EnvioPedido() ;
        envPed.setEmpleado( objEnvioPedido.getEmpleado() ) ;
        
        Vehiculo objVehiculo = objEnvioPedido.getVehiculo() ;
        objVehiculo.setEstado( 2 ) ;
        objVehiculo = VehiculoDAO.modificarVehiculo(objVehiculo);
        envPed.setVehiculo( objVehiculo  ) ;
        
        envPed.setFechaSalida( objEnvioPedido.getFechaSalida() ) ;
        envPed.setFechaRegreso( objEnvioPedido.getFechaRegreso() ) ; 
        envPed.setUtilidad(new BigDecimal(objEnvioPedido.getUtilidad()));
//        System.out.println("fecha en el Presenter " + envPed.getFechaRegreso());
        envPed.setEstado( 1 ) ;
        envPed.setModoDeAutorizacion( modoAuto ) ;

        Ruta ruta = RutaDAO.registrarRuta( new Ruta() ) ;
        List<Camino> lstCamino = objEnvioPedido.getrCamino() ;
        for(int i = 0 ; i < lstCamino.size() ; i++){
            Camino cam = lstCamino.get( i ) ;
            RutaCaminoId rcId = new RutaCaminoId() ;
            rcId.setPuntoInicial( cam.getPuntoMapaByPuntoInicial().getIdPunto() ) ;
            rcId.setPuntoFinal( cam.getPuntoMapaByPuntoFinal().getIdPunto() ) ;
            rcId.setIdRuta( ruta.getIdRuta() ) ;
            rcId.setOrden( i+1 ) ;
            RutaCamino rCamino = new RutaCamino() ;
            rCamino.setId( rcId ) ;
            rCamino.setCamino( cam ) ;
            rCamino.setRuta( ruta ) ;
            RutaDAO.registrarRutaCamino( rCamino ) ;
        }
        
        envPed.setRuta( ruta ) ;
        envPed = EnvioPedidoDAO.registrarEnvioPedido( envPed ) ;
        
        List<Pedido>lstPedidos = objEnvioPedido.getPedidos() ;
        for( Pedido ped : lstPedidos ){
            ped.setEstado( 1 ) ;
            ped.setEnvioPedido( envPed ) ;
            PedidoDAO.modificarPedido( ped ) ;
        }
        
        Empleado objEmpleado = objEnvioPedido.getEmpleado();
        objEmpleado.setEstado(2);
        EmpleadoDAO.modificarEmpleado(objEmpleado);
    }
    
    public static List<EnvioPedido> buscarEnvioPedido(){
        return EnvioPedidoDAO.buscarEnvioPedido();
    }
    
    public static void actualizarEnvioPedido(){
        List<EnvioPedido> lstEnvioPedido = EnvioPedidoDAO.buscarEnvioPedidoEnRuta();
        for(int i=0; i<lstEnvioPedido.size();i++){
            EnvioPedido objEnvioPedido = lstEnvioPedido.get(i);
            if(objEnvioPedido.getFechaRegreso().before(new Date())){
                objEnvioPedido.setEstado(2);
                //actualizamos el envio pedido
                EnvioPedidoDAO.actualizarEnvioPedido(objEnvioPedido);
                //actualizamos el vehiculo
                objEnvioPedido.getVehiculo().setEstado(1);
                VehiculoDAO.modificarVehiculo(objEnvioPedido.getVehiculo());
                //actualizamos el empleado
                objEnvioPedido.getEmpleado().setEstado(1);
                EmpleadoDAO.modificarEmpleado(objEnvioPedido.getEmpleado());
                
            }
            //actualizamos los pedidos
            List<Pedido> lstPedidos = new ArrayList(objEnvioPedido.getPedidos());
                for(int j=0; j<lstPedidos.size(); j++){
                    Pedido objPedido = lstPedidos.get(j);
                    if(objPedido.getFechaEntrega().before(new Date())){
                        objPedido.setEstado(2);
                        PedidoDAO.modificarPedido(objPedido);
                    }
                }
            
        }
    }
}
